<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function Star(name, age) {
            this.name = name
            this.age = age
        }
        Star.prototype.sing = function () {
            console.log('sing')
        }
        const ldh = new Star('刘德华', 20)
        console.dir(ldh)
        console.log(ldh.__proto__ === Star.prototype)
        // 1. 所有的对象，都有一个__proto__属性(隐式原型),属性值也是一个对象(其实就是指向的原型对象)

        // __proto__隐式原型
        // ==> 实例通过__proto__访问(链接)到了它的原型对象
        // ==> __proto__相当于一个桥梁，连接，实例就是通过__proto__访问到原型对象。

        // 2. 对象的隐式原型指向构造函数的显示原型
        ldh.__proto__ === Star.prototype
        console.log(ldh.__proto__ === Star.prototype) //true

        // ==================== eg ====================
        function Animal() {
            this.color = 'orange'
        }
        const cat = new Animal()
        console.log(cat)

        console.log(cat.__proto__ === Animal.prototype)
        console.log(Animal.prototype.constructor === Animal)
        console.log(cat.__proto__.constructor === Animal)

        // 1. '实例对象.__proto__ === 构造函数.prototype' ==> 原型

        // 2. __proto__ 表示了实例和原型之间的一个关系，相当于就是一个桥梁，实例通过它访问原型
    </script>
</body>

</html>